/**
 * 检查用户名是否有效
 * @param {string} str - 待检查的用户名
 * @returns {boolean} - 如果用户名在['admin', 'editor']列表中，则返回true，否则返回false
 */
function isValidUsername(str) {
  return ['admin', 'editor'].indexOf(str.trim()) >= 0;
}

/**
 * 判断路径是否为外部路径
 * @param {string} path - 待检查的路径
 * @returns {boolean} - 如果路径是外部路径（以http、https、mailto或tel开头），则返回true，否则返回false
 */
function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path);
}

/**
 * 验证是否为有效的手机号码
 * @param {string} val - 待检查的手机号码
 * @returns {boolean} - 如果手机号码格式正确，则返回true，否则返回false
 */
function isCellPhone(val) {
  if (!/^1(3|4|5|6|7|8)\d{9}$/.test(val)) {
    return false;
  } else {
    return true;
  }
}

/**
 * 校验账号
 * @param {Object} rule - 验证规则
 * @param {string} value - 用户输入的账号
 * @param {Function} callback - 回调函数，验证结果的回调
 */
function checkUserName(rule, value, callback) {
  if (value == "") {
    callback(new Error("请输入账号"));
  } else if (value.length > 20 || value.length < 3) {
    callback(new Error("账号长度应是3-20"));
  } else {
    callback();
  }
}

/**
 * 校验姓名
 * @param {Object} rule - 验证规则
 * @param {string} value - 用户输入的姓名
 * @param {Function} callback - 回调函数，验证结果的回调
 */
function checkName(rule, value, callback) {
  if (value == "") {
    callback(new Error("请输入姓名"));
  } else if (value.length > 12) {
    callback(new Error("账号长度应是1-12"));
  } else {
    callback();
  }
}

/**
 * 校验手机号码
 * @param {Object} rule - 验证规则
 * @param {string} value - 用户输入的手机号码
 * @param {Function} callback - 回调函数，验证结果的回调
 */
function checkPhone(rule, value, callback) {
  if (value == "") {
    callback(new Error("请输入手机号"));
  } else if (!isCellPhone(value)) {
    callback(new Error("请输入正确的手机号!"));
  } else {
    callback();
  }
}

/**
 * 验证身份证号码
 * @param {Object} rule - 验证规则
 * @param {string} value - 用户输入的身份证号码
 * @param {Function} callback - 回调函数，验证结果的回调
 */
function validID(rule, value, callback) {
  let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  if (value == '') {
    callback(new Error('请输入身份证号码'));
  } else if (reg.test(value)) {
    callback();
  } else {
    callback(new Error('身份证号码不正确'));
  }
}